package main;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;


/**
 * ContentHandler zur Verarbeitung von SimpleText Parserevents.
 */
class SimpleTextContentHandler extends DefaultHandler {
    /**
     * Letzter gefundener Text zwischen zwei Tags.
     */
    private String currentText;

    /**
     * Speichert die aktuelle Nummer von nummerierten List-Items.
     */
    private int listItemNumber;

    /**
     * Gibt an, ob sich der Parser aktuell in einer nummerierten oder nicht nummerierten Liste befindet.
     */
    private boolean numberedList;

    /**
     * Textpane auf der die Ausgabe der SimpleText-Datei erfolgt.
     */
    private SimpleTextPane textPane;

    /**
     * Initialisert die Instanz mit Standardwerten.
     *
     * @param textPane zu beschreibende Textpane.
     */
    public SimpleTextContentHandler(SimpleTextPane textPane) {
        this.numberedList = false;
        this.listItemNumber = 1;
        this.textPane = textPane;
    }

    /**
     * Methode zur Verarbeitung von Start-Tags.
     *
     * @see DefaultHandler
     */
    @Override
    public void startElement(String uri, String localName, String qName, Attributes atts) throws SAXException {
        if(localName.equals("Aufzaehlung")) {
            if(Integer.parseInt(atts.getValue("nummeriert")) == 1) {
                this.numberedList = true;
            } else {
                this.numberedList = false;
            }
        }
    }

    /**
     * Methode zur Verarbeitung von End-Tags.
     *
     * @see DefaultHandler
     */
    @Override
    public void endElement(String uri, String localName, String qName) throws SAXException {
        
        if(localName.equals("Ueberschrift")) {
            this.textPane.addUeberschrift(this.currentText);
        }
        
        
        if(localName.equals("Absatz")) {
            this.textPane.addAbsatz(this.currentText);
        }
        
        
        if(localName.equals("Item")) {
            if(this.numberedList) {
                this.textPane.addListItem(this.currentText, this.listItemNumber++);
            } else {
                this.textPane.addListItem(this.currentText, -1);
            }
        }
        
        if(localName.equals("Aufzaehlung")) {
            this.listItemNumber = 1;
        }
                
    }

    /**
     * Methode zur Verarbeitung von Textstellen.
     *
     * @see DefaultHandler
     */
    @Override
    public void characters(char[] ch, int start, int length) throws SAXException {
        this.currentText = new String(ch, start, length);
        this.currentText = this.currentText.trim() + System.getProperty("line.separator");
    }

        
}
